package org.example.diary.entity.vo;

import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;
import org.example.diary.constant.Constant;
import org.example.diary.exceptions.SystemErrorCode;

@Getter
@Setter
@Accessors(chain = true)
public class Response<T> {


    private int code;
    /**
     * 错误消息
     */
    private String msg;
    /**
     * 消息对象
     */
    private T data;



    /**
     * 返回成功
     *
     * @return
     */
    public static <T> Response<T> ok() {
        return new Response<T>().setMsg(Constant.SUCCESS);
    }

    /**
     * 返回成功
     *
     * @param object
     * @return
     */
    public static <T> Response<T> ok(T object) {
        return new Response<T>().setData(object).setMsg(Constant.SUCCESS);
    }

    /**
     * 返回错误
     *
     * @param errorCode
     * @return
     */
    public static <T> Response<T> error(SystemErrorCode errorCode) {
        return error(errorCode.getCode(), errorCode.getMessage(), null);
    }

    /**
     * 返回错误
     *
     * @param code
     * @param msg
     * @return
     */
    public static <T> Response<T> error(int code, String msg, T data) {
        return
                new Response<T>()
                        .setData(data)
                        .setCode(code)
                        .setMsg(msg);
    }

    /**
     * 返回错误
     *
     * @param errorCode
     * @return
     */
    public static <T> Response<T> error(SystemErrorCode errorCode, T data) {
        return error(errorCode.getCode(), errorCode.getMessage(), data);
    }

    /**
     * 返回错误
     *
     * @param code
     * @param msg
     * @return
     */
    public static <T> Response<T> error(int code, String msg) {
        return error(code, msg, null);
    }
}
